/**
 * Copyright (c) 2011 eelpo.com
 * All rights reserved.
 */
package com.eelpo.common.security;

import java.io.Serializable;
import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.SealedObject;

import com.eelpo.common.util.BlankUtils;

/**
 * 功能描述：针对对象进行加密解密
 * <p>
 * 版权所有：广州市艾尔博科技有限公司
 * <p>
 * 未经本公司许可，不得以任何方式复制或使用本程序任何部分
 * 
 * @author <a href="mailto:Brian@eelpo.com">汪洪州</a>
 * @since 1.0
 */
public class ObjectEncryptor {

	/**
	 * <p>
	 * 方法用途和描述：将对象进行加密
	 * </p>
	 * 
	 * @param object
	 *            ：加密的对象
	 * @param key
	 *            ：加密的密钥
	 * @param algorithm
	 *            ：加密算法
	 * @return：加密过的对象
	 */
	public static SealedObject encrypt(Serializable object, Key key, String algorithm) {

		if (BlankUtils.isBlank(object) || BlankUtils.isBlank(key) || BlankUtils.isBlank(algorithm)) {
			return null;
		}

		try {

			Cipher cipher = Cipher.getInstance(algorithm);
			cipher.init(Cipher.ENCRYPT_MODE, key);

			return new SealedObject(object, cipher);

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * <p>
	 * 方法用途和描述：将对象进行解密
	 * </p>
	 * 
	 * @param sealedObject
	 *            ：解密的对象
	 * @param key
	 *            ：解密的密钥
	 * @return：解密过的对象
	 */
	public static Serializable encrypt(SealedObject sealedObject, Key key) {

		if (BlankUtils.isBlank(sealedObject) || BlankUtils.isBlank(key)) {
			return null;
		}

		try {

			return (Serializable) sealedObject.getObject(key);

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}
}
